package com.xci.sys.dao;

import com.github.pagehelper.Page;
import com.xci.core.internal.Const;
import com.xci.core.annotation.Top;
import com.xci.core.annotation.Paged;
import com.xci.sys.entity.SysFile;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 文件数据层
 */
public interface FileDao {
    /**
     * 新建关联文件
     * @param entity 关联文件对象
     * @return 返回影响的行数
     */
    Integer insert(@Param("entity") SysFile entity);

    /**
     * 删除关联文件
     * @param id 关联文件主键
     * @return 返回影响的行数
     */
    Integer delete(@Param("id") String id);

    /**
     * 根据记录主键删除关联文件
     * @param recordId 记录主键
     * @return 返回影响的行数
     */
    Integer deleteByRecordId(@Param("recordId") String recordId);

    /**
     * 检查记录主键是否存在
     * @param recordId 记录主键
     * @return 如果存在返回true, 否则返回false
     */
    Boolean existByRecordId(@Param("recordId") String recordId);

    /**
     * 根据主键获取单个关联文件对象
     * @param id 关联文件主键
     * @return 返回关联文件对象
     */
    SysFile selectById(@Param("id") String id);

    /**
     * 根据记录主键获取第一个关联文件对象
     * @param recordId 记录主键
     * @return 返回关联文件对象
     */
    @Top(count = 1)
    SysFile selectByRecordId(@Param("recordId") String recordId);

    /**
     * 查询关联文件列表
     * @return 返回关联文件对象列表
     */
    List<SysFile> selectList();

    /**
     * 查询关联文件分页列表
     * @return 返回关联文件对象分页列表
     */
    @Paged(defaultSortName = "file_id", defaultSortDir = Const.DESC)
    Page<SysFile> selectPageList();

    /**
     * 根据记录主键获取关联文件对象列表
     * @param recordId 记录主键
     * @return 返回关联文件对象列表
     */
    List<SysFile> selectListByRecordId(@Param("recordId") String recordId);

    /**
     * 根据记录主键获取关联文件对象分页列表
     * @param recordId 记录主键
     * @return 返回关联文件对象分页列表
     */
    @Paged(defaultSortName = Const.ID, defaultSortDir = Const.DESC)
    Page<SysFile> selectPageListByRecordId(@Param("recordId") String recordId);
}